{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "93662aa7-02d6-4772-b93a-e1c67fdbfea3",
   "metadata": {},
   "source": [
    "# 加载模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6ff1f501-61da-4538-9d1b-daa33d759ad7",
   "metadata": {},
   "source": [
    "此处如果是已经下载到本地的模型，加载时报jina-embeddings-v2-base-en加载时报Could not locate the configuration_bert.py inside jinaai/jina-bert-implementation，可以修改jina-embeddings-v2-base-en下的config.json文件，替换auto_map下的四个类映射的路径中的jinaai/jina-bert-implementation为本地绝对路径\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "af375836-b870-458b-87d1-4e00565977eb",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:34.052165Z",
     "iopub.status.busy": "2025-02-27T15:07:34.051466Z",
     "iopub.status.idle": "2025-02-27T15:07:38.136747Z",
     "shell.execute_reply": "2025-02-27T15:07:38.136232Z",
     "shell.execute_reply.started": "2025-02-27T15:07:34.052095Z"
    },
    "papermill": {
     "duration": 0.115454,
     "end_time": "2024-11-23T14:29:00.919641",
     "exception": false,
     "start_time": "2024-11-23T14:29:00.804187",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "from transformers import AutoModel\n",
    "from transformers import AutoTokenizer\n",
    "\n",
    "# 为了保持与官方代码一致，此处使用这个模型\n",
    "model_path = 'jinaai/jina-embeddings-v2-base-en'\n",
    "\n",
    "tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)\n",
    "model = AutoModel.from_pretrained(model_path, trust_remote_code=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "1e2c72b8-ee12-4130-af88-699998aa230c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:39.360876Z",
     "iopub.status.busy": "2025-02-27T15:07:39.360097Z",
     "iopub.status.idle": "2025-02-27T15:07:39.629291Z",
     "shell.execute_reply": "2025-02-27T15:07:39.628797Z",
     "shell.execute_reply.started": "2025-02-27T15:07:39.360804Z"
    },
    "papermill": {
     "duration": 0.319981,
     "end_time": "2024-11-23T14:29:01.380771",
     "exception": false,
     "start_time": "2024-11-23T14:29:01.060790",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "d29a8d77-bea4-40d5-86cc-6cacdafbe702",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:39.681702Z",
     "iopub.status.busy": "2025-02-27T15:07:39.681433Z",
     "iopub.status.idle": "2025-02-27T15:07:39.684717Z",
     "shell.execute_reply": "2025-02-27T15:07:39.684105Z",
     "shell.execute_reply.started": "2025-02-27T15:07:39.681685Z"
    }
   },
   "outputs": [],
   "source": [
    "import sys"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "655f9dc5-a5fe-424d-94ed-f096f29cf3f7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:39.840864Z",
     "iopub.status.busy": "2025-02-27T15:07:39.840641Z",
     "iopub.status.idle": "2025-02-27T15:07:39.843695Z",
     "shell.execute_reply": "2025-02-27T15:07:39.843214Z",
     "shell.execute_reply.started": "2025-02-27T15:07:39.840846Z"
    }
   },
   "outputs": [],
   "source": [
    "sys.path.append('late-chunking')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bf013231-48ef-4fa5-aa74-77dd90fe6ab0",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:40.069537Z",
     "iopub.status.busy": "2025-02-27T15:07:40.068764Z",
     "iopub.status.idle": "2025-02-27T15:07:40.082654Z",
     "shell.execute_reply": "2025-02-27T15:07:40.080113Z",
     "shell.execute_reply.started": "2025-02-27T15:07:40.069467Z"
    }
   },
   "outputs": [],
   "source": [
    "from chunked_pooling import chunked_pooling, chunk_by_sentences"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9c95bcac-6b82-498c-8469-44058de146aa",
   "metadata": {},
   "source": [
    "此处以wikipedia上拷贝的DeepSeek的文本为例进行分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "9a099ca8-c7f5-418f-a590-0291a617438f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:40.203280Z",
     "iopub.status.busy": "2025-02-27T15:07:40.202521Z",
     "iopub.status.idle": "2025-02-27T15:07:40.213994Z",
     "shell.execute_reply": "2025-02-27T15:07:40.211644Z",
     "shell.execute_reply.started": "2025-02-27T15:07:40.203211Z"
    }
   },
   "outputs": [],
   "source": [
    "input_text = open(os.path.join('data', 'deepseek_wiki.txt')).read()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "58010181-09e2-4150-afcd-7a01370fa5f8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:40.384063Z",
     "iopub.status.busy": "2025-02-27T15:07:40.383860Z",
     "iopub.status.idle": "2025-02-27T15:07:40.389209Z",
     "shell.execute_reply": "2025-02-27T15:07:40.388639Z",
     "shell.execute_reply.started": "2025-02-27T15:07:40.384047Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8551"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(input_text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "ed78e8bb-a19c-4f87-bd8a-7bed1d37b398",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:40.541221Z",
     "iopub.status.busy": "2025-02-27T15:07:40.540452Z",
     "iopub.status.idle": "2025-02-27T15:07:40.570987Z",
     "shell.execute_reply": "2025-02-27T15:07:40.570492Z",
     "shell.execute_reply.started": "2025-02-27T15:07:40.541150Z"
    }
   },
   "outputs": [],
   "source": [
    "chunks, span_annotations = chunk_by_sentences(input_text, tokenizer)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "462e8415-2818-4796-8829-d3546164d6bc",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:40.722142Z",
     "iopub.status.busy": "2025-02-27T15:07:40.721322Z",
     "iopub.status.idle": "2025-02-27T15:07:40.734968Z",
     "shell.execute_reply": "2025-02-27T15:07:40.732549Z",
     "shell.execute_reply.started": "2025-02-27T15:07:40.722070Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "32"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(chunks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "fe22a35f-8fd5-4091-a574-64e6fce0ce2d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:40.923027Z",
     "iopub.status.busy": "2025-02-27T15:07:40.922817Z",
     "iopub.status.idle": "2025-02-27T15:07:46.091224Z",
     "shell.execute_reply": "2025-02-27T15:07:46.090802Z",
     "shell.execute_reply.started": "2025-02-27T15:07:40.923010Z"
    }
   },
   "outputs": [],
   "source": [
    "inputs = tokenizer(input_text, return_tensors='pt')\n",
    "model_output = model(**inputs)\n",
    "embeddings = chunked_pooling(model_output, [span_annotations])[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8cd960a1-88c5-4a19-9915-c2512c49e548",
   "metadata": {},
   "source": [
    "整个embeddings，就是Late Chunking后的embedding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "353b9bae-f340-44c3-ab6e-0190145b85d6",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:46.092179Z",
     "iopub.status.busy": "2025-02-27T15:07:46.091950Z",
     "iopub.status.idle": "2025-02-27T15:07:46.094707Z",
     "shell.execute_reply": "2025-02-27T15:07:46.094377Z",
     "shell.execute_reply.started": "2025-02-27T15:07:46.092164Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "32"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(embeddings)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf66b6cb-df48-4bc5-9330-f6a35047e412",
   "metadata": {},
   "source": [
    "# 计算相似度"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b94219a9-2a13-48a8-a5c8-0755b5d48de9",
   "metadata": {},
   "source": [
    "将每个片段作为Query，然后与Late Chunking之后片段的Embedding计算余弦相似度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "753761c3-d634-41a1-b372-81c096e2caaf",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:46.095451Z",
     "iopub.status.busy": "2025-02-27T15:07:46.095210Z",
     "iopub.status.idle": "2025-02-27T15:07:46.107503Z",
     "shell.execute_reply": "2025-02-27T15:07:46.107070Z",
     "shell.execute_reply.started": "2025-02-27T15:07:46.095438Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "cos_sim = lambda x, y: np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "d7958a5c-8d57-402c-b729-8639ce7cfafb",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:46.108643Z",
     "iopub.status.busy": "2025-02-27T15:07:46.108335Z",
     "iopub.status.idle": "2025-02-27T15:07:47.869380Z",
     "shell.execute_reply": "2025-02-27T15:07:47.868989Z",
     "shell.execute_reply.started": "2025-02-27T15:07:46.108630Z"
    }
   },
   "outputs": [],
   "source": [
    "single_chunk_embeds = np.array([model.encode(chunk) for chunk in chunks])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "92a9766f-8236-4d6c-be29-7e903264f674",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:47.870120Z",
     "iopub.status.busy": "2025-02-27T15:07:47.869971Z",
     "iopub.status.idle": "2025-02-27T15:07:47.872759Z",
     "shell.execute_reply": "2025-02-27T15:07:47.872427Z",
     "shell.execute_reply.started": "2025-02-27T15:07:47.870107Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(32, 768)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "single_chunk_embeds.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "d8f5db22-f524-4461-955f-f174e844f8b7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:47.873390Z",
     "iopub.status.busy": "2025-02-27T15:07:47.873261Z",
     "iopub.status.idle": "2025-02-27T15:07:47.999204Z",
     "shell.execute_reply": "2025-02-27T15:07:47.996719Z",
     "shell.execute_reply.started": "2025-02-27T15:07:47.873378Z"
    }
   },
   "outputs": [],
   "source": [
    "# 不能用这个计算，不是单位向量\n",
    "# dot_products = np.dot(embeddings, single_chunk_embeds.T)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "61092895-3dae-424b-b793-9832e3d979dc",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:48.002419Z",
     "iopub.status.busy": "2025-02-27T15:07:48.001635Z",
     "iopub.status.idle": "2025-02-27T15:07:48.012213Z",
     "shell.execute_reply": "2025-02-27T15:07:48.009888Z",
     "shell.execute_reply.started": "2025-02-27T15:07:48.002349Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.metrics.pairwise import cosine_similarity"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "b60811dd-4166-44e9-aa7c-9ef9c4bd36cb",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:48.015290Z",
     "iopub.status.busy": "2025-02-27T15:07:48.014568Z",
     "iopub.status.idle": "2025-02-27T15:07:48.035157Z",
     "shell.execute_reply": "2025-02-27T15:07:48.033243Z",
     "shell.execute_reply.started": "2025-02-27T15:07:48.015221Z"
    }
   },
   "outputs": [],
   "source": [
    "cos_sim = cosine_similarity(embeddings, single_chunk_embeds)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "450c3b7f-eff1-4c60-85d8-d3351ee13361",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:48.039431Z",
     "iopub.status.busy": "2025-02-27T15:07:48.038080Z",
     "iopub.status.idle": "2025-02-27T15:07:48.052167Z",
     "shell.execute_reply": "2025-02-27T15:07:48.049594Z",
     "shell.execute_reply.started": "2025-02-27T15:07:48.039357Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(32, 32)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cos_sim.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "ffe51bf7-71e5-4637-a56b-6dd43f15e54f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:48.065362Z",
     "iopub.status.busy": "2025-02-27T15:07:48.062588Z",
     "iopub.status.idle": "2025-02-27T15:07:48.395371Z",
     "shell.execute_reply": "2025-02-27T15:07:48.394893Z",
     "shell.execute_reply.started": "2025-02-27T15:07:48.065286Z"
    }
   },
   "outputs": [],
   "source": [
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "da90167f-0183-463d-8358-476ceb9597b3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:48.395983Z",
     "iopub.status.busy": "2025-02-27T15:07:48.395763Z",
     "iopub.status.idle": "2025-02-27T15:07:48.720481Z",
     "shell.execute_reply": "2025-02-27T15:07:48.720036Z",
     "shell.execute_reply.started": "2025-02-27T15:07:48.395969Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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H4+5c+di8ODBKCwstLlai8lkwp133ong4GB8/vnnaNu2LY4dO4aAgACrcj169MCGDRssj93cHGvmOXRNoV6vR58+feDn54fg4GAMHz4chYWFNssKIZCSkgKVSoVVq1Y5VCkiIiKilmrOnDmYOHEiJkyYgO7duyM7Oxve3t5YuHChzfILFy7E+fPnsWrVKvTv3x9RUVEYNGgQYmJirMq5ubkhNDTUsrVp08ahejnUKNy8eTPS0tKQn5+P9evXo6qqCsnJyTAYDLXKzp07FypVy7n1CxEREZEtRqMRZWVlVpu9O7mZTCYUFBQgKSnJsk+tViMpKQlbt261GbNmzRokJCQgLS0NISEh6NmzJ1577TXU1NRYlTtw4ADCw8PRoUMHPPjggygqKnLoeTjUKMzJycH48ePRo0cPxMTEYPHixSgqKkJBQYFVuV27duGtt96y2+IlIiIiciazaLxNr9dDp9NZbXq93mY9z549i5qaGoSEhFjtDwkJsdwp7s8OHz6Mzz//HDU1Nfj6668xffp0vPXWW3jllVcsZeLj47F48WLk5OQgKysLR44cwa233opLly41+DWUuqawtLQUABAY+L+JIRUVFXjggQcwb948hIaGypyeiIiIqMnLzMxERkaG1b4/38JXhtlsRnBwMD788ENoNBrExcXhxIkT+Oc//4mZM2cCAFJSUizle/Xqhfj4eERGRuLTTz/Fww8/3KA8ihuFZrMZU6ZMQf/+/dGzZ0/L/qlTp6Jfv34YNmyY0lMTEREROaQxJ5potdoGNwLbtGkDjUaDkpISq/0lJSV2O9PCwsLg7u4OjUZj2detWzcUFxfDZDLBw6P2bPeAgAB07twZBw8ebPDzULx4dVpaGvbs2YNly5ZZ9q1ZswYbN27E3LlzG3weW+PwJpPtcXgiIiKi5szDwwNxcXHIzc217DObzcjNzUVCQoLNmP79++PgwYMwm82Wffv370dYWJjNBiEAlJeX49ChQwgLa/gSYooahenp6Vi7di02bdqEdu3aWfZv3LgRhw4dQkBAANzc3CxToUeMGIHExESb57I1Dv/R/LeUVIuIiIiuU2Zz422OysjIwPz587FkyRLs3bsXkyZNgsFgwIQJEwAAY8eORWZmpqX8pEmTcP78eTz55JPYv38/vvrqK7z22mtIS0uzlHnqqaewefNmHD16FD/++CPuuece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aq2Hij085FaCJyIiIiLHONQozMrKAgAkJiZa7V+0aBHGjx8PAJgyZQoqKysxdepUnD9/HjExMVi/fj06duzolAoTERER/VlLmvDRWBwePm6I5557zmqdQiIiIiJq2njvYyIiImr22FMoj/eeIyIiIiI2ComIiIioiQ4fB3mWScV7egYpjvXVmqRye2jMimMDxWm53Ebls7Y93cOlcnujXHFsuL9BKre7ukZxrLdJ7r3mo1X+/+13+YxU7iovD8WxXh4VUrn9S08pjvULiJLK3cqjVHGsECqp3F4VZxXHepiUf0YAoMine/2F7GjtWyWVu7pG+evm6VYtldvs4ak49lJgdP2F6tC5fLviWPXRwvoL1UHl66841tfDWyp3tb/y7xYgRCq3DDPHj6U51FOo1+vRp08f+Pn5ITg4GMOHD7dak/Do0aNQqVQ2t88++8zplSciIiIi53CoUbh582akpaUhPz8f69evR1VVFZKTk2EwXOnpad++PU6dOmW1vfjii/D19bW7eDURERGRLGFuvK2lcGj4OCcnx+rx4sWLERwcjIKCAgwcOBAajQahoaFWZVauXImRI0fC19dXvrZERERE5BJSE01KS69c2xMYGGjzeEFBAXbt2oWHH35YJg0RERERuZjiiSZmsxlTpkxB//790bNnT5tlFixYgG7duqFfv36KK0hERERUn4beYIPsU9woTEtLw549e7Blyxabxy9fvoylS5di+vTpdZ7HaDTCaDRa7TOZjPDw0NqJICIiIiJnUzR8nJ6ejrVr12LTpk1o166dzTKff/45KioqMHbs2DrPpdfrodPprLYF2e8qqRYRERFdp8zmxttaCofvfTx58mSsXLkSeXl5iI62vwbUggULcPfddyMoqO41AzMzM5GRkWG1b//vytchIyIiIiLHOdQoTEtLw9KlS7F69Wr4+fmhuLgYAKDT6eDl5WUpd/DgQXz33Xf4+uuv6z2nVquFVms9VOzhoXwRZiIiIrr+8JpCeQ4NH2dlZaG0tBSJiYkICwuzbMuXL7cqt3DhQrRr1w7JyclOrSwRERERuYbDw8cN8dprr+G1115TVCEiIiIiuvaa5L2PiYiIiBxh5uixNKnFq4mIiIioZWBPIRERETV7gl2F0ppkozCo5qRUvJc2WHmsW5VU7jDvS4pjdRePS+WGuUZxaICvsf5CdfAxXVQc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/46ZM2di4cKFtY7t378fycnJKCoqgkqlwoABA7Bs2TKEhYUBuNIwDQ8PR01Njc1z5+TkYNiwYfD19UVFRQVWrlyJsWPHIiYmBmazGZs3b8a3335rs2GoVqsRExODgIAAq/2bN2/GzTffDB8fH6hUKmzcuNFm7u7du2PLli0IDAzE77//joEDB+LChQvo3LkzDh06BDc3N+Tn59v8Ety5cydatWplOfbRRx8hOzvb8uWZnp6O+++/3+5rqlaroVKp0LFjRzz88MMYN24cQkND7Zb/s/fffx/bt2/H0KFDcf/99+Ojjz6CXq+H2WzGvffei5deeglubrb/ltmxYweSkpLQqVMneHl5YevWrXjggQdgMpmwbt06dO/eHTk5OfDz87Ob32QyYdWqVTZ7pocNGwYPD48GP5c/KikpwQcffIAZM2bUWe748eMICAiAr6+v1f6qqips3boVAwcOtBl37tw57N69GzExMQgMDMTZs2exYMECGI1G3HfffYp6lzt06IB169Y59KMjhEBeXp7lh3rw4MGWH2Jbjh8/Dk9PT0tD4vvvv7d6v6WlpSEhIcFm7FtvvYW//vWvihoTV61duxbbt2/H4MGD0b9/f2zcuBFvvvmm5f326KOP2o29fPkyPvnkE5t/gNxxxx12406fPo0RI0bghx9+QEREBEJCQgBceY8UFRWhf//++OKLLxAcHKzoOf33v//FTTfdZPO7qaysDI888gi+/PJL+Pv747HHHsPMmTMtfyzV971WWFiIwYMH4/fff0eHDh3w7bff4r777sO+ffsghIC3tzd+/PFHm++ZNWvW2Dznvffei3feeQft27cHANx99902y/3973/HG2+8AV9fX1y+fBljxozBypUrIYSASqXCoEGDsGbNmlqfHQBITExEeno6/vrXv+KHH37AHXfcgS5duqBbt27Yv38/CgsLsWHDBrvvNbVaDT8/P4waNQoPP/ww4uPjbZazZcWKFRg5ciQCAgJgNBqxcuVK3Hfffbj55puh0WiwYcMG/Pvf/8YDDzxgM/706dNITU3Fjh07oFarYTabERsbixMnTuDMmTPIyMjAG2+8UWcdGvMPkGvp3icONlruFe92arTcTiWaME9PT7F37167x/fu3Ss8PT0Vn3/Xrl1CrVbbPDZ8+HBx1113iTNnzogDBw6Iu+66S0RHR4tjx44JIYQo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\n",
      "text/plain": [
       "<Figure size 800x800 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 8))\n",
    "\n",
    "sns.heatmap(cos_sim, square=True, cmap='coolwarm')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "165ab97f-2074-4994-a383-d89d678c9ec8",
   "metadata": {},
   "source": [
    "从这个结果来看，最相似的片段，并不总是自己，前5个句子，似乎都跟第一个句子最相似"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dc79a059-c20a-42ed-ac79-ca655b11d3de",
   "metadata": {},
   "source": [
    "# 观察那些不与自己最相似的片段的特征"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f4e11f11-5640-424b-be5e-e0b50c558878",
   "metadata": {},
   "source": [
    "由于Late Chunking是将整个片段每个位置的hidden state做平均，所以可以想想，短句、代词较多的句子，应该会跟其他句子更相似。简便起见，此处检查句子长度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "947220b8-8124-4cfd-b110-336351fadf7d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:48.721176Z",
     "iopub.status.busy": "2025-02-27T15:07:48.721017Z",
     "iopub.status.idle": "2025-02-27T15:07:48.723979Z",
     "shell.execute_reply": "2025-02-27T15:07:48.723663Z",
     "shell.execute_reply.started": "2025-02-27T15:07:48.721163Z"
    }
   },
   "outputs": [],
   "source": [
    "data = []\n",
    "for idx in range(cos_sim.shape[0]):\n",
    "    data.append({\n",
    "        'idx': idx,\n",
    "        'most_sim_idx': cos_sim[idx].argmax(),\n",
    "        'chunk_len': len(chunks[idx])\n",
    "    })"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "d0a7d193-d1dd-454b-8ea7-73306d8c8695",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:48.724833Z",
     "iopub.status.busy": "2025-02-27T15:07:48.724706Z",
     "iopub.status.idle": "2025-02-27T15:07:48.736480Z",
     "shell.execute_reply": "2025-02-27T15:07:48.736044Z",
     "shell.execute_reply.started": "2025-02-27T15:07:48.724821Z"
    }
   },
   "outputs": [],
   "source": [
    "cos_sim_df = pd.DataFrame(data)\n",
    "cos_sim_df['self_most_sim'] = (cos_sim_df['idx'] == cos_sim_df['most_sim_idx']).astype(int)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "7a25dddb-6865-47c5-affd-e4586f2a0fcb",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:48.782314Z",
     "iopub.status.busy": "2025-02-27T15:07:48.782140Z",
     "iopub.status.idle": "2025-02-27T15:07:48.789609Z",
     "shell.execute_reply": "2025-02-27T15:07:48.789110Z",
     "shell.execute_reply.started": "2025-02-27T15:07:48.782298Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>idx</th>\n",
       "      <th>most_sim_idx</th>\n",
       "      <th>chunk_len</th>\n",
       "      <th>self_most_sim</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>210</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>90</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>121</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>91</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>228</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "      <td>861</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "      <td>182</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>7</td>\n",
       "      <td>7</td>\n",
       "      <td>497</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>8</td>\n",
       "      <td>7</td>\n",
       "      <td>65</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "      <td>164</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>204</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>11</td>\n",
       "      <td>10</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>12</td>\n",
       "      <td>10</td>\n",
       "      <td>454</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>13</td>\n",
       "      <td>12</td>\n",
       "      <td>159</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>14</td>\n",
       "      <td>15</td>\n",
       "      <td>219</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>15</td>\n",
       "      <td>15</td>\n",
       "      <td>767</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>16</td>\n",
       "      <td>15</td>\n",
       "      <td>18</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>17</td>\n",
       "      <td>17</td>\n",
       "      <td>277</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>18</td>\n",
       "      <td>18</td>\n",
       "      <td>286</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>19</td>\n",
       "      <td>19</td>\n",
       "      <td>911</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>20</td>\n",
       "      <td>20</td>\n",
       "      <td>935</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>21</td>\n",
       "      <td>19</td>\n",
       "      <td>73</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>22</td>\n",
       "      <td>12</td>\n",
       "      <td>62</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>23</td>\n",
       "      <td>19</td>\n",
       "      <td>85</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>24</td>\n",
       "      <td>24</td>\n",
       "      <td>77</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>25</td>\n",
       "      <td>25</td>\n",
       "      <td>154</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>26</td>\n",
       "      <td>25</td>\n",
       "      <td>34</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>27</td>\n",
       "      <td>28</td>\n",
       "      <td>70</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>28</td>\n",
       "      <td>28</td>\n",
       "      <td>302</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>29</td>\n",
       "      <td>29</td>\n",
       "      <td>234</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>30</td>\n",
       "      <td>30</td>\n",
       "      <td>295</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>31</td>\n",
       "      <td>29</td>\n",
       "      <td>62</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    idx  most_sim_idx  chunk_len  self_most_sim\n",
       "0     0             0        210              1\n",
       "1     1             0         90              0\n",
       "2     2             0        121              0\n",
       "3     3             0         91              0\n",
       "4     4             0        228              0\n",
       "5     5             5        861              1\n",
       "6     6             7        182              0\n",
       "7     7             7        497              1\n",
       "8     8             7         65              0\n",
       "9     9             7        164              0\n",
       "10   10            10        204              1\n",
       "11   11            10         64              0\n",
       "12   12            10        454              0\n",
       "13   13            12        159              0\n",
       "14   14            15        219              0\n",
       "15   15            15        767              1\n",
       "16   16            15         18              0\n",
       "17   17            17        277              1\n",
       "18   18            18        286              1\n",
       "19   19            19        911              1\n",
       "20   20            20        935              1\n",
       "21   21            19         73              0\n",
       "22   22            12         62              0\n",
       "23   23            19         85              0\n",
       "24   24            24         77              1\n",
       "25   25            25        154              1\n",
       "26   26            25         34              0\n",
       "27   27            28         70              0\n",
       "28   28            28        302              1\n",
       "29   29            29        234              1\n",
       "30   30            30        295              1\n",
       "31   31            29         62              0"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cos_sim_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "f2bb185b-d226-4768-b0f0-c6998abd459c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:50.577657Z",
     "iopub.status.busy": "2025-02-27T15:07:50.576871Z",
     "iopub.status.idle": "2025-02-27T15:07:50.583228Z",
     "shell.execute_reply": "2025-02-27T15:07:50.582788Z",
     "shell.execute_reply.started": "2025-02-27T15:07:50.577583Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.4375"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cos_sim_df['self_most_sim'].mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "1bf2f6c4-394c-42ec-b7cb-3ecbebe61947",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:50.827474Z",
     "iopub.status.busy": "2025-02-27T15:07:50.826694Z",
     "iopub.status.idle": "2025-02-27T15:07:50.934763Z",
     "shell.execute_reply": "2025-02-27T15:07:50.934372Z",
     "shell.execute_reply.started": "2025-02-27T15:07:50.827402Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='self_most_sim', ylabel='chunk_len'>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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Eb9OY/Xu3dvnAmXLsuR2u/X111/rlVdeCVg4AACAlvKr7AwbNszneUhIiK666irdcsst6t69eyByAQAABIRfZWfatGmBzgEAANAq/Co7ktTU1KS9e/eqpqZGTU1NPusGDhzY4mAAAACB4FfZ2bJli0aOHKmvvvrqB3c+dzgcP7izNAAAgF38+jTWI488oqysLO3cuVPHjh3T8ePHvcuxY8f8DvOrX/1KDofD50sLPR6Pxo4dq06dOqlDhw4aPny4qqurfV538OBBDR06VFFRUUpISNCECRN09uxZv3MAAABz+DWz88UXX+jNN9/UtddeG7Ag27Zt069//Wv99Kc/9Rl/4okn9Mc//lG///3vFRsbq3HjxunOO+/Upk2bJEmNjY0aOnSokpKStHnzZh05ckT33XefwsPDNXPmzIDlAwAAlye/Znb69eunvXv3BizEqVOnVFBQoMWLF+uKK67wjtfW1uo3v/mN5s6dq0GDBqlPnz5asmSJNm/erC1btkiS/vSnP2n37t16/fXXlZmZqby8PD377LMqKSnRmTNnApYRAABcnppddv785z97l0cffVRPPvmkli5dqqqqKp91f/7zn//uEGPHjtXQoUOVk5PjM15VVaWGhgaf8e7du6tLly6qqKiQJFVUVCgjI0OJiYnebXJzc1VXV6ddu3b93VkAAIBZmn0aKzMzUw6Hw+eC5AcffND7+Py6v/cC5RUrVmj79u3atm3bD9a53W5FREQoLi7OZzwxMVFut9u7zd8WnfPrz6+7kPr6etXX13uf19XVNTsvAAC4vDS77Ozfvz/gOz906JAef/xxrV27Vk6nM+DvfzGzZs3S9OnT22x/AADAPs0+jdW1a1fvUlpaqvLycp+xrl27qry8XCtWrGj2zquqqlRTU6Of/exnCgsLU1hYmD744APNnz9fYWFhSkxM1JkzZ3TixAmf11VXVyspKUmSlJSU9INPZ51/fn6b7ysuLlZtba13OXToULMzAwCAy4tfFyj/+te/vuBtIXr27KlFixY1+30GDx6sTz/9VB9//LF3ycrKUkFBgfdxeHi4ysvLva/5/PPPdfDgQWVnZ0uSsrOz9emnn6qmpsa7zdq1axUTE6P09PQL7jcyMlIxMTE+CwAAMJNfHz13u93q3LnzD8avuuoqHTlypNnv07FjR11//fU+Y9HR0erUqZN3fNSo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xyVndtavXy+Hw6F3331XvXv3lsvl0qBBg1RTU6OysjL16NFDMTExGjlypL799lvv6+rr6/XYY48pISFBTqdTN910k7Zt2+Zdf/z4cRUUFOiqq66Sy+VSt27dtGTJEklSWlqaJKl3795yOBy65ZZbLvnvs379evXt21fR0dGKi4vTgAED9NVXX0n64Wms+++/X8OGDdPMmTOVmJiouLg4zZgxQ2fPntWECRMUHx+vlJQUbx4ALRNmdwAAwe/IkSO65557NGfOHOXn5+vkyZP68MMPZVmWli9frqlTp2rhwoXq3bu3duzYodGjRys6OlqFhYU+75OamqojR47ouuuu04wZM3T33XcrNja2WRmeeeYZLVy4UFFRUbrrrrt01113KTIyUqWlpTp16pTy8/O1YMECPf3005KkiRMn6g9/+IOWLVumrl27as6cOcrNzdXevXsVHx+vKVOmaPfu3SorK9OVV16pvXv36rvvvpMkbd26VX379tV7772nnj17KiIi4keznT17VsOGDdPo0aP1xhtv6MyZM9q6dascDsdFX7Nu3TqlpKRow4YN2rRpk0aNGqXNmzdr4MCBqqys1MqVK/Xwww/rn//5n5WSktKsfyMAF2EBwCVUVVVZkqwDBw78YN0111xjlZaW+ow9++yzVnZ2tmVZlrV//35LkrVjxw7v+tjYWGvJkiXN2vf7779vSbLee+8979isWbMsSda+ffu8Yw8//LCVm5trWZZlnTp1ygoPD7eWL1/uXX/mzBkrOTnZmjNnjmVZlnX77bdbDzzwwAX3eaHMP+bo0aOWJGv9+vUXXD9t2jSrV69e3ueFhYVW165drcbGRu/YddddZ918883e52fPnrWio6OtN954o1kZAFwcp7EAXFKvXr00ePBgZWRk6Oc//7kWL16s48eP6/Tp09q3b59GjRqlDh06eJfnnntO+/btC2iGn/70p97HiYmJioqK0j/8wz/4jNXU1Eg6d01QQ0ODBgwY4F0fHh6uvn37as+ePZKkMWPGaMWKFcrMzNTEiRO1efNmv7PFx8fr/vvvV25urm6//Xa9/PLLOnLkyI++pmfPngoJ+b//BCcmJiojI8P7PDQ0VJ06dfIeEwD/UXYAXFJoaKjWrl2rsrIypaena8GCBbruuuu0c+dOSdLixYv18ccfe5edO3dqy5YtAc0QHh7ufexwOHyenx9rampq9vvl5eXpq6++0hNPPKHDhw9r8ODBeuqpp/zOt2TJElVUVKh///5auXKl/vEf//FH/w0ulL+lxwTgwig7AJrF4XBowIABmj59unbs2KGIiAht2rRJycnJ+vLLL3Xttdf6LOcv8rXDNddc4813XkNDg7Zt26b09HTv2FVXXaXCwkK9/vrrmjdvnl577TVJ8l6j09jY+Hftt3fv3iouLtbmzZt1/fXXq7S0NABHA6CluEAZwCVVVlaqvLxcQ4YMUUJCgiorK/X111+rR48emj59uh577DHFxsbq1ltvVX19vT766CMdP35cRUVFtuSNjo7WmDFjvJ9s6tKli+bMmaNvv/1Wo0aNkiRNnTpVffr0Uc+ePVVfX6/Vq1erR48ekqSEhAS5XC6tWbNGKSkpcjqdP3oh9f79+/Xaa6/pX/7lX5ScnKzPP/9cX3zxhe677742OV4AP46yA+CSYmJitGHDBs2bN091dXXq2rWrXnzxReXl5UmSoqKi9Pzzz2vChAmKjo5WRkaGxo8fb2vmX/3qV2pqatK9996rkydPKisrS++++66uuOIKSedmb4qLi3XgwAG5XC7dfPPNWrFihSQpLCxM8+fP14wZMzR16lTdfPPNWr9+/UX3FRUVpc8++0zLli3T0aNH1blzZ40dO1YPP/xwWxwqgEtwWJZl2R0CAACgtXDNDgAAMBplB4CtHnnkEZ+Prf/t8sgjj9gdz+tiGTt06KAPP/zQ7ngAfgSnsQDYqqamRnV1dRdcFxMTo4SEhDZOdGF79+696Lqrr75aLperDdMA+HtQdgAAgNE4jQUAAIxG2QEAAEaj7AAAAKNRdgAAgNEoOwAAwGiUHQAAYDTKDgAAMBplBwAAGO3/A7mjK+XuxYX2AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.boxplot(x='self_most_sim', y='chunk_len', data=cos_sim_df)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4e0fe8ba-6860-4e3a-b75b-d81bda602d31",
   "metadata": {},
   "source": [
    "从结论可以看出，长度较短的句子都不与自己最相似"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b9a75e04-12fd-4409-9a2e-729881afd793",
   "metadata": {},
   "source": [
    "# case分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "a72fbcf9-549b-43b7-800d-49335d2b4266",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:51.507292Z",
     "iopub.status.busy": "2025-02-27T15:07:51.506504Z",
     "iopub.status.idle": "2025-02-27T15:07:51.515678Z",
     "shell.execute_reply": "2025-02-27T15:07:51.515116Z",
     "shell.execute_reply.started": "2025-02-27T15:07:51.507221Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>idx</th>\n",
       "      <th>most_sim_idx</th>\n",
       "      <th>chunk_len</th>\n",
       "      <th>self_most_sim</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>90</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>121</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>91</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>228</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "      <td>182</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>8</td>\n",
       "      <td>7</td>\n",
       "      <td>65</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "      <td>164</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>11</td>\n",
       "      <td>10</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>12</td>\n",
       "      <td>10</td>\n",
       "      <td>454</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>13</td>\n",
       "      <td>12</td>\n",
       "      <td>159</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>14</td>\n",
       "      <td>15</td>\n",
       "      <td>219</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>16</td>\n",
       "      <td>15</td>\n",
       "      <td>18</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>21</td>\n",
       "      <td>19</td>\n",
       "      <td>73</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>22</td>\n",
       "      <td>12</td>\n",
       "      <td>62</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>23</td>\n",
       "      <td>19</td>\n",
       "      <td>85</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>26</td>\n",
       "      <td>25</td>\n",
       "      <td>34</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>27</td>\n",
       "      <td>28</td>\n",
       "      <td>70</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>31</td>\n",
       "      <td>29</td>\n",
       "      <td>62</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    idx  most_sim_idx  chunk_len  self_most_sim\n",
       "1     1             0         90              0\n",
       "2     2             0        121              0\n",
       "3     3             0         91              0\n",
       "4     4             0        228              0\n",
       "6     6             7        182              0\n",
       "8     8             7         65              0\n",
       "9     9             7        164              0\n",
       "11   11            10         64              0\n",
       "12   12            10        454              0\n",
       "13   13            12        159              0\n",
       "14   14            15        219              0\n",
       "16   16            15         18              0\n",
       "21   21            19         73              0\n",
       "22   22            12         62              0\n",
       "23   23            19         85              0\n",
       "26   26            25         34              0\n",
       "27   27            28         70              0\n",
       "31   31            29         62              0"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cos_sim_df[cos_sim_df['self_most_sim'] == 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "c0cc82d1-771a-49d4-9945-64e81ff43f40",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-02-27T15:07:52.062740Z",
     "iopub.status.busy": "2025-02-27T15:07:52.062562Z",
     "iopub.status.idle": "2025-02-27T15:07:52.066342Z",
     "shell.execute_reply": "2025-02-27T15:07:52.066006Z",
     "shell.execute_reply.started": "2025-02-27T15:07:52.062724Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "idx=1, most sim idx=0\n",
      "chunks['idx']:  Based in Hangzhou, Zhejiang, it is owned and funded by the Chinese hedge fund High-Flyer.\n",
      "chunks['most_sim_idx']: Hangzhou DeepSeek Artificial Intelligence Basic Technology Research Co., Ltd.,[2][3][4][a] doing business as DeepSeek,[b] is a Chinese artificial intelligence company that develops large language models (LLMs).\n",
      "\n",
      "\n",
      "idx=2, most sim idx=0\n",
      "chunks['idx']:  DeepSeek was founded in July 2023 by High-Flyer co-founder Liang Wenfeng, who also serves as the CEO for both companies.\n",
      "chunks['most_sim_idx']: Hangzhou DeepSeek Artificial Intelligence Basic Technology Research Co., Ltd.,[2][3][4][a] doing business as DeepSeek,[b] is a Chinese artificial intelligence company that develops large language models (LLMs).\n",
      "\n",
      "\n",
      "idx=3, most sim idx=0\n",
      "chunks['idx']:  The company launched an eponymous chatbot alongside its DeepSeek-R1 model in January 2025.\n",
      "chunks['most_sim_idx']: Hangzhou DeepSeek Artificial Intelligence Basic Technology Research Co., Ltd.,[2][3][4][a] doing business as DeepSeek,[b] is a Chinese artificial intelligence company that develops large language models (LLMs).\n",
      "\n",
      "\n",
      "idx=4, most sim idx=0\n",
      "chunks['idx']: \n",
      "\n",
      "Released under the MIT License, DeepSeek-R1 provides responses comparable to other contemporary large language models, such as OpenAI's GPT-4o and o1.[6] Its training cost is reported to be significantly lower than other LLMs.\n",
      "chunks['most_sim_idx']: Hangzhou DeepSeek Artificial Intelligence Basic Technology Research Co., Ltd.,[2][3][4][a] doing business as DeepSeek,[b] is a Chinese artificial intelligence company that develops large language models (LLMs).\n",
      "\n",
      "\n",
      "idx=6, most sim idx=7\n",
      "chunks['idx']:  This breakthrough in reducing expenses while increasing efficiency and maintaining the model's performance power and quality in the AI industry sent \"shockwaves\" through the market.\n",
      "chunks['most_sim_idx']:  It threatened the dominance of AI leaders like Nvidia and contributed to the largest drop in US stock market history, with Nvidia alone losing $600 billion in market value.[15][16]\n",
      "\n",
      "History\n",
      "Founding and early years (2016–2023)\n",
      "In February 2016, High-Flyer was co-founded by AI enthusiast Liang Wenfeng, who had been trading since the 2007–2008 financial crisis while attending Zhejiang University.[17]\n",
      "\n",
      "The company began stock-trading using a GPU-dependent deep learning model on 21 October 2016.\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "for idx, row in cos_sim_df.iterrows():\n",
    "    if row['idx'] == row['most_sim_idx']:\n",
    "        continue\n",
    "    print(f\"idx={row['idx']}, most sim idx={row['most_sim_idx']}\")\n",
    "    print(f\"chunks['idx']: {chunks[row['idx']]}\")\n",
    "    print(f\"chunks['most_sim_idx']: {chunks[row['most_sim_idx']]}\")\n",
    "    print('\\n')\n",
    "\n",
    "    if idx >= 5:\n",
    "        break"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "30739bc0-769c-4a9e-9555-1c02e161a811",
   "metadata": {},
   "source": [
    "这个结果看起来问题应该还是比较大的，例如对于idx=1的句子“Based in Hangzhou, Zhejiang, it is owned and funded by the Chinese hedge fund High-Flyer.“，这句话跟它本身不是最相似的，而是跟”Hangzhou DeepSeek Artificial Intelligence Basic Technology Research Co., Ltd.,[2][3][4][a] doing business as DeepSeek,[b] is a Chinese artificial intelligence company that develops large language models (LLMs).“最相似"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8bb98e41-3f5e-4a2e-910d-d659d47fa5ea",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  },
  "papermill": {
   "default_parameters": {},
   "duration": 1058.563616,
   "end_time": "2024-11-23T14:46:37.625874",
   "environment_variables": {},
   "exception": null,
   "input_path": "13_contextual_embeddings.ipynb",
   "output_path": "run_13_contextual_embeddings.ipynb",
   "parameters": {},
   "start_time": "2024-11-23T14:28:59.062258",
   "version": "2.6.0"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "0cd8c168767249f2a5fa412173f6e751": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_5ce1d1d9d86c40d9839877ff95734491",
       "max": 100,
       "min": 0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_231702cf4d79477f9d5548665a1b18fe",
       "tabbable": null,
       "tooltip": null,
       "value": 100
      }
     },
     "2133bb8d85d34b8db112b4408ad60320": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "231702cf4d79477f9d5548665a1b18fe": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "23b1ad9c0f9c46c888da66e85c90eb84": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "24e6eadc3dc940ecabf30dd1a3c6d1f3": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_fa4bddf2c33241b5bf918054518f128f",
       "max": 52,
       "min": 0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_edc33e82be8f41eba6a18a0ef074ab7a",
       "tabbable": null,
       "tooltip": null,
       "value": 52
      }
     },
     "2f60367b1c8941e2bf71661c33969ae8": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "3865f25c78aa46f29a25d807205281c3": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "3d0b06deaa654b989eece8cde06fa0f8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "3f8ceda83287475b97608e42f5f6782f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "4881e496f1c84fe29ce9ebebaddfb3c2": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_bd096d5d219a467786a85cfe1613fedd",
        "IPY_MODEL_24e6eadc3dc940ecabf30dd1a3c6d1f3",
        "IPY_MODEL_bc2b8104b4244d8cacedeb95e800d91c"
       ],
       "layout": "IPY_MODEL_6b9a8e43c1c342dba500a14e7149b600",
       "tabbable": null,
       "tooltip": null
      }
     },
     "5ce1d1d9d86c40d9839877ff95734491": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "5ddb08be5cc64c9ab40a1d62a21763a5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_86283159049d48b1adcfb2de2d404d4d",
       "placeholder": "​",
       "style": "IPY_MODEL_2133bb8d85d34b8db112b4408ad60320",
       "tabbable": null,
       "tooltip": null,
       "value": " 100/100 [08:34&lt;00:00, 10.01s/it]"
      }
     },
     "5ef9d83ccad1471f85335900a24a8553": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "6b9a8e43c1c342dba500a14e7149b600": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "816a079a8c804fbfa9b9a74f941abea8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_bcc69ec5db1b4aab977807284c9290e7",
        "IPY_MODEL_0cd8c168767249f2a5fa412173f6e751",
        "IPY_MODEL_5ddb08be5cc64c9ab40a1d62a21763a5"
       ],
       "layout": "IPY_MODEL_d1178c6858284f788a80b5f2a14fd0b7",
       "tabbable": null,
       "tooltip": null
      }
     },
     "86283159049d48b1adcfb2de2d404d4d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "8ff8262c56604119883f4a5f13bb74ab": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_5ef9d83ccad1471f85335900a24a8553",
       "placeholder": "​",
       "style": "IPY_MODEL_e89e77133c344fc48c1d62f5a607ec93",
       "tabbable": null,
       "tooltip": null,
       "value": " 8/8 [00:18&lt;00:00,  2.27s/it]"
      }
     },
     "9189a076554543aaa6f5ee04e40dbe1b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "988e6697a2af486fadeaf0b84347b565": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_e1aae4c55cb64f379e74f15357275628",
        "IPY_MODEL_fd9e23198ca1489a9773fda3510bf857",
        "IPY_MODEL_8ff8262c56604119883f4a5f13bb74ab"
       ],
       "layout": "IPY_MODEL_d2ee15001d2244529f7e47d3333c0f8e",
       "tabbable": null,
       "tooltip": null
      }
     },
     "9fc7d91f94a94933bde5ba80e64587de": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "a7d240a289084bdfba4724c0efd5ab07": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "bc2b8104b4244d8cacedeb95e800d91c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_2f60367b1c8941e2bf71661c33969ae8",
       "placeholder": "​",
       "style": "IPY_MODEL_9fc7d91f94a94933bde5ba80e64587de",
       "tabbable": null,
       "tooltip": null,
       "value": " 52/52 [04:26&lt;00:00,  4.22s/it]"
      }
     },
     "bcc69ec5db1b4aab977807284c9290e7": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_3f8ceda83287475b97608e42f5f6782f",
       "placeholder": "​",
       "style": "IPY_MODEL_3d0b06deaa654b989eece8cde06fa0f8",
       "tabbable": null,
       "tooltip": null,
       "value": "100%"
      }
     },
     "bd096d5d219a467786a85cfe1613fedd": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_3865f25c78aa46f29a25d807205281c3",
       "placeholder": "​",
       "style": "IPY_MODEL_9189a076554543aaa6f5ee04e40dbe1b",
       "tabbable": null,
       "tooltip": null,
       "value": "100%"
      }
     },
     "cc3ed8dc4a5c43aca7b62d904865b2fa": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "cf68b6fe24964ce792aa63827489cb97": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "d1178c6858284f788a80b5f2a14fd0b7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "d2ee15001d2244529f7e47d3333c0f8e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "e1aae4c55cb64f379e74f15357275628": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_23b1ad9c0f9c46c888da66e85c90eb84",
       "placeholder": "​",
       "style": "IPY_MODEL_cf68b6fe24964ce792aa63827489cb97",
       "tabbable": null,
       "tooltip": null,
       "value": "100%"
      }
     },
     "e89e77133c344fc48c1d62f5a607ec93": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "edc33e82be8f41eba6a18a0ef074ab7a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "fa4bddf2c33241b5bf918054518f128f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "fd9e23198ca1489a9773fda3510bf857": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_cc3ed8dc4a5c43aca7b62d904865b2fa",
       "max": 8,
       "min": 0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_a7d240a289084bdfba4724c0efd5ab07",
       "tabbable": null,
       "tooltip": null,
       "value": 8
      }
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
